﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIGEB.Prototipo.control;
using SIGEB.Modelo.moduloPerfiles;

namespace SIGEB.Prototipo.Control
{
    public class controlTipoPerfil
    {
        #region "constructores"

        public controlTipoPerfil(controlPrincipal cp)
        {
            this.cp = cp;
        }

        #endregion

        #region "validación"

        internal bool nombreValido(string nombre)
        {
            return Validacion.LongitudCadenaValida(nombre, true, 0);
        }

        internal bool permisosValidos(string permisos)
        {
            return acciones.MAXIMO == permisos.Length - 1;
        }

        internal bool camposAgregarValidos(string nombre, string permisos)
        {
            return nombreValido(nombre) && permisosValidos(permisos);
        }

        internal bool camposModificarValidos(tipoPerfil editando)
        {
            return nombreValido(editando.nombre) && permisosValidos(editando.permisosPredeterminados);
        }

        #endregion

        #region "métodos"

        internal void crearTipoPerfil(string nombre, string permisos)
        {
            if (!camposAgregarValidos(nombre, permisos))
            {
                throw new Exception("Campos Inválidos");
            }
            if (!cp.usuarioActualPuede(acciones.TIPERF_AGREGAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
            cp.datos.tipoPerfiles.agregartipoPerfil(new tipoPerfil(null, nombre, permisos));
        }

        internal void modificarTipoPerfil(tipoPerfil editando)
        {
            if (!cp.usuarioActualPuede(acciones.TIPERF_MODIFICAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
            if (!camposModificarValidos(editando))
            {
                throw new Exception("Campos del tipo perfil inválidos");
            }
            cp.datos.tipoPerfiles.modificartipoPerfil(editando.codTipoPerfil, editando);
        }

        internal void eliminarTipoPerfil(tipoPerfil eliminando)
        {
            if (!cp.usuarioActualPuede(acciones.TIPERF_ELIMINAR))
            {
                cp.ExcepcionUsrSinPermisos();
            }
            if (eliminando != null)
            {
                cp.datos.tipoPerfiles.eliminartipoPerfil(eliminando.codTipoPerfil);
            }
        }

        internal LinkedList<tipoPerfil> obtenerTiposPerfil()
        {
            if (!cp.usuarioActualPuede(acciones.TIPERF_CONSULTAR))
            {
                return null;
            }
            return cp.datos.tipoPerfiles.obtenerPerfiles();
        }

        internal tipoPerfil obtenerTipoPerfil(string codigo)
        {
            if (!cp.usuarioActualPuede(acciones.TIPERF_CONSULTAR))
            {
                return null;
            }
            if (codigo == null)
            {
                return null;
            }
            return cp.datos.tipoPerfiles.obtenertipoPerfil(codigo);
        }

        #endregion

        #region "atributos"

        controlPrincipal cp;

        #endregion
    }
}
